<?php

class ValidadorDeFormularioDeCandidato extends Model{

	/*******************
	 * ATRIBUTOS
	 *******************/

	private $mensagemStatus;
	private $formularioValido;
	public $camposDoFormulario;
	public $errors;

	/*******************
	 * CONSTRUTOR
	 *******************/

	public function __construct() {
		// load database library into $this->db (can be omitted if not required)
		//parent::__construct();
		$this->mensagemStatus = "";
		$this->formularioValido = false;
		$this->errors = array();
		$this->camposDoFormulario = null;
	}

	/*******************
	 * METODOS
	 *******************/

	//Verifica se há erros em qualquer um dos campos do formulário, caso houver devolve o array de erros
	public function verificarCamposValidos(){
		$this->camposDoFormulario = Validate::factory($_POST)
		->rule('Nome', 'not_empty')
		//->rule('Idade', 'not_empty')
		//->rule('Idade', 'digit')
		->rule('Email', 'not_empty')
		->rule('Email', 'email')
		->rule('Email2', 'not_empty')
		->rule('Email2', 'email')
		->rule('Email2',  'matches', array('Email'))
		->rule('Sexo', 'not_empty')
		->rule('dataNascimentoDia', 'not_empty')
		->rule('dataNascimentoDia', 'digit')
		->rule('dataNascimentoMes', 'not_empty')
		->rule('dataNascimentoMes', 'digit')
		->rule('dataNascimentoAno', 'not_empty')
		->rule('dataNascimentoAno', 'digit')
		->rule('EstadoCivil', 'not_empty')
		->rule('TelefoneResidencial', 'not_empty')
		->rule('TelefoneResidencial', 'phone')
		->rule('TelefoneCelular', 'not_empty')
		->rule('TelefoneCelular', 'phone')
		->rule('OutrosTelefones', 'phone')
		->rule('RG', 'not_empty')
		->rule('CPF', 'not_empty');

		if ($this->camposDoFormulario->check()){
			$this->setFormularioValido(true);
		}
		else{
			$this->setFormularioValido(false);
			$this->setErros($this->camposDoFormulario->errors('camposDoFormularioDeFormularioDeCandidato'));
			$this->redefinirMensagensDeErro();
		}

	}


	private function redefinirMensagensDeErro(){
		//REDEFININDO AS MENSAGENS DE ERRO
		if (isset($this->errors['Nome'])){
			$this->errors['Nome'] = "Nome Obrigatório";
		}
		if (isset($this->errors['Idade'])){
			if(strnatcmp($this->errors['Idade'], "Idade must not be empty") == 0){
				$this->errors['Idade'] = "Campo 'Idade' tem preenchimento obrigatório";
			}
			else if(strnatcmp($this->errors['Idade'], "Idade must be a digit") == 0){
				$this->errors['Idade'] = "Insira somente número";
			}
			
		}
		if (isset($this->errors['Email'])){
			$stringMail = 'camposDoFormularioDeFormularioDeCandidato.Email.email';
			
			if(strcmp($this->errors['Email'], $stringMail )== 0){
				$this->errors['Email'] = "Formato de e-mail incorreto";
			}
			else if(strcmp($this->errors['Email'], "Email must not be empty") == 0 ){
				$this->errors['Email'] = "Campo Email tem preenchimento obrigatório";
			}

		}
		if (isset($this->errors['Email2'])){
			$stringMail2 = "camposDoFormularioDeFormularioDeCandidato.Email2.email";
			
			if(strnatcmp($this->errors['Email2'], $stringMail2 )== 0){
				$this->errors['Email2'] = "Formato de e-mail incorreto";
			}
			else if(strnatcmp($this->errors['Email2'], "Email must not be empty") == 0 ){
				$this->errors['Email2'] = "Campo Email tem preenchimento obrigatório";
			}
			else{
				$this->errors['Email2'] = "E-Mail não coincide com o inserido acima";
			}			
		}
		if (isset($this->errors['Sexo'])){
			$this->errors['Sexo'] = "Escolha uma opção";
		}
		if (isset($this->errors['dataNascimentoDia'])){
			$this->errors['dataNascimentoDia'] = "Campo Dia de nascimento tem preenchimento obrigatório";
		}
		if (isset($this->errors['dataNascimentoMes'])){
			$this->errors['dataNascimentoMes'] = "Campo Mes de nascimento tem preenchimento obrigatório";
		}
		if (isset($this->errors['dataNascimentoAno'])){
			$this->errors['dataNascimentoAno'] = "Campo Ano de nascimento tem preenchimento obrigatório";
		}
		if (isset($this->errors['EstadoCivil'])){
			$this->errors['EstadoCivil'] = "Escolha uma opção";
		}
		if (isset($this->errors['TelefoneResidencial'])){

			$stringTelefoneDefMSG = "camposDoFormularioDeFormularioDeCandidato.TelefoneResidencial.phone";

			if(strcmp($this->errors['TelefoneResidencial'], $stringTelefoneDefMSG) == 0){
				$this->errors['TelefoneResidencial'] = "Formato de telefone incorreto";
			}
			else {
				$this->errors['TelefoneResidencial'] = "Campo 'Telefone Residencial' tem preenchimento obrigatório";
			}

		}
		if (isset($this->errors['TelefoneCelular'])){
			$stringTelefoneCelDefMSG = "camposDoFormularioDeFormularioDeCandidato.TelefoneCelular.phone";

			if(strcmp($this->errors['TelefoneCelular'], $stringTelefoneCelDefMSG) == 0){
				$this->errors['TelefoneCelular'] = "Formato de telefone incorreto";
			}
			else {
				$this->errors['TelefoneCelular'] = "Campo 'Telefone Celular' tem preenchimento obrigatório";
			}

		}

		if (isset($this->errors['OutrosTelefones'])){
			$this->errors['OutrosTelefones'] = "Formato de telefone incorreto";
		}

		if (isset($this->errors['RG'])){
			$this->errors['RG'] = "Campo RG preenchimento obrigatório";
		}
		if (isset($this->errors['CPF'])){
			$this->errors['CPF'] = "Campo CPF preenchimento obrigatório";
		}
	}


	// This might go in base Model class
	public function getFormValues() {
		return arr::overwrite($this->fields, $this->$camposDoFormulario->as_array());
	}

	// This might go in base Model class
	public function getValidationErrors() {
		return arr::overwrite($this->fields, $this->$camposDoFormulario->errors('form_errors'));
	}


	/*	public function validadorDeFormularioDeCandidato(){

	}
	*/

	/*******************
	 * GETTERS/SETTERS
	 *******************/

	public function isFormularioValido() {
		return $this->formularioValido;
	}

	public function setFormularioValido($formularioValido){
		$this->formularioValido = $formularioValido;
	}

	public function getErros() {
		return $this->errors;
	}

	public function setErros($errors){
		$this->errors = $errors;
	}

	public function getCamposDoFormulario() {
		return $_POST;
	}

	public function setCamposDoFormulario($camposDoFormulario){
		$this->camposDoFormulario = $camposDoFormulario;
	}
}
?>